﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Entities;
using System.Data;
using System.Data.SqlClient;
namespace AccesoDatos
{
    public class Seguridad
    {
        public static bool validarUsuario(string usuario, string password)
        {
            //Devuelve verdadero si existe una fila con el nombre de usuario + password ingresados como parámetros
            bool existe = false;
            SqlConnection conexion = null;
            try
            {
                conexion = DB.Conectar();
                string cmd = "SELECT idUsuario, nombreUsuario, idRol, idCliente, passwordUsuario FROM Usuario WHERE (nombreUsuario = @user) AND (passwordUsuario = @pass)";
                List<SqlParameter> lstParametros = new List<SqlParameter>();
                lstParametros.Add(new SqlParameter("@user", usuario));
                lstParametros.Add(new SqlParameter("@pass", password));
                SqlDataReader filas = DB.GenerarReader(cmd, lstParametros, conexion);
                if (filas.HasRows)
                {
                    existe = true;
                }
            }
            catch (SqlException ex)
            {
                //Con throw la información de la pila es mas profunda de donde se genero el error
                //En la capa de Presentación se Captura como Exception
                throw new Exception("Hubo un problema al validar el usuario.", ex);
            }
            catch (Exception ex)
            {
                throw new Exception("No se pudo validar el usuario");
            }
            finally
            {
                conexion.Close();
            }
            return existe;
        }
        public static List<Usuario> obtenerUsuarios()
        {
            List<Usuario> lstUsuarios = null;
            SqlConnection conexion = null;
            try
            {
                conexion = DB.Conectar();
                string cmd = "SELECT idUsuario, nombreUsuario, idRol, idCliente, password FROM Usuario order by nombreUsuario";
                List<SqlParameter> lstParametros = new List<SqlParameter>();
                SqlDataReader dr = DB.GenerarReader(cmd, lstParametros, conexion);
                lstUsuarios = new List<Usuario>();
                Usuario oUsuario = null;
                while (dr.Read())
                {
                    oUsuario = new Usuario();
                    oUsuario.IdUsuario = (int)dr["idUsuario"];
                    oUsuario.NombreUsuario = dr["nombreUsuario"].ToString();
                    oUsuario.IdRol = (int)dr["idRol"];
                    if (dr["idCliente"] != null)
                    {
                        oUsuario.IdCliente = (int)dr["idCliente"];
                    }
                    lstUsuarios.Add(oUsuario);
                    oUsuario = null;
                }
            }
            catch (SqlException ex)
            {
                //Con throw la información de la pila es mas profunda de donde se genero el error
                //En la capa de Presentación se Captura como Exception
                throw new Exception("Hubo un problema al obtener los usuarios.", ex);
            }
            catch (Exception ex)
            {
                throw new Exception("No se pudo obtener los usuarios");
            }
            finally
            {
                conexion.Close();
            }
            return lstUsuarios;
        }
        public static string ObtenerRoles(string usuario)
        {
            //Devuelve la lista de roles separada por |
            string lstRoles = string.Empty;
            SqlConnection conexion = null;
            try
            {
                conexion = DB.Conectar();
                string cmd = "SELECT Rol.nombreRol, Usuario.nombreUsuario FROM Usuario INNER JOIN Rol ON Usuario.idRol = Rol.idRol WHERE (Usuario.nombreUsuario = @user)";
                List<SqlParameter> lstParametros = new List<SqlParameter>();
                lstParametros.Add(new SqlParameter("@user", usuario));
                SqlDataReader dr = DB.GenerarReader(cmd, lstParametros, conexion);
                Rol oRol = null;
                while (dr.Read())
                {
                    oRol = new Rol();
                    //oRol.IdRol = (int)dr["idRol"];
                    oRol.NombreRol = dr["nombreRol"].ToString();
                    //oRol.Descripcion = dr["descripcion"].ToString();
                    if (string.IsNullOrEmpty(lstRoles))
                    {
                        lstRoles = oRol.NombreRol;
                    }
                    else
                    {
                        lstRoles += "|"+oRol.NombreRol;
                    }
                    oRol = null;
                }
            }
            catch (SqlException ex)
            {
                //Con throw la información de la pila es mas profunda de donde se genero el error
                //En la capa de Presentación se Captura como Exception
                throw new Exception("Hubo un problema al obtener los roles.", ex);
            }
            catch (Exception ex)
            {
                throw new Exception("No se pudo obtener los roles");
            }
            finally
            {
                conexion.Close();
            }
            return lstRoles;
        }
    }
}